caffe:同步Batch Normalization(syncbn)作用

您所在的位置:网站首页 sync bn caffe:同步Batch Normalization(syncbn)作用

caffe:同步Batch Normalization(syncbn)作用

2024-07-16 16:19| 来源: 网络整理| 查看: 265

1、BN训练与测试过程

BN层有4个参数,gamma、beta、moving mean、moving variance。其中gamma、beta为学习参数,moving mean、moving variance为数据集统计均值与方差,不可学习。在训练过程中:

在这里插入图片描述 y为BN层输出,此时归一化的均值与方差为当前mini-batch的均值与方差。同时也记录moving mean、moving variance的值,每训练一个batch,moving mean、moving variance就更新一次。注意此参数更新过程不是学习过程,而是纯粹的计算train-set在当前BN数据分布过程,因此不能将算作是学习过程。decay为一个接近于1的值,比如0.9997。

在测试过程中:

在这里插入图片描述 2、prototxt示例 layer { name: "conv3_3_3x3/bn" type: "SyncBN" bottom: "conv3_3_3x3" top: "conv3_3_3x3/bn" param { lr_mult: 1 decay_mult: 0 } param { lr_mult: 1 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } bn_param { slope_filler { type: "constant" value: 1 } bias_filler { type: "constant" value: 0 } frozen: false momentum: 0.9997 } }

momentum为decay,slope_filler与bias_filler分别为gamma与beta的初始化参数。frozen为是否禁止更新参数标识,该示例为train.prototxt,因此为false,在测试过程中应改为true。

3、为什么要同步BN

目前网络的训练多为多卡训练,大型网络结构以及复杂任务会使得每张卡负责的batch-size小于等于1,若不进行同步BN,moving mean、moving variance参数会产生较大影响,造成BN层失效。具体参考《MegDet:A Large Mini-Batch Object Detector》

4、融合BN操作

为简化inference过程,以及商业代码保密,通常进行BN融合操作。即把BN参数融合至conv层

在这里插入图片描述 参考:

https://www.cnblogs.com/makefile/p/batch-norm.html?utm_source=debugrun&utm_medium=referral https://blog.csdn.net/yjl9122/article/details/84729057



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3